package common.utils;

import java.util.Random;
import java.util.UUID;

public class CardTicketIDUtil {
	/* 随机种子 */
	private static char x36s[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
			.toCharArray();
	/* 随机数长度 */
	private static short length = 12;

	public static synchronized String generatorId(int len) {
		
		len = (len <=0)?length:len;
		char chs[] = new char[len];
		/**
		 * 生成前4位随机字符(以系统时间为随机池, 以36位数字+英文字母为随机种子)
		 */
		//System.out.println(System.currentTimeMillis() - 936748800000L);
		long v = (System.currentTimeMillis() - 936748800000L) >> 1; // 1999-9-9
																	// 开始，起码要横跨102年:)
		for (int i = 4; i > 0; i--) {
			chs[i] = x36s[(int) (v % 10)];
			v = v / 12;
		}
		chs[0] = x36s[(int) (new Random().nextInt(26)) + 10]; // 确保第一个随机字符是"字母", 以符合一般编程的标识符定义
		chs[1] = x36s[(int) (new Random().nextInt(26)) + 10]; // 确保第二个随机字符是"字母"。

		/**
		 * 生成后len-4位随机字符(以UUID为随机池, 以36位数字+英文字母为随机种子)
		 */
		UUID u = UUID.randomUUID();
		v = u.getLeastSignificantBits() ^ u.getMostSignificantBits();
		if (v < 0) {
			v = -v;
		}

		for (int i = 4; i < len; i++) {
			chs[i] = x36s[(int) (v % 10)];
			v = v / 12;
		}

		return new String(chs);
	}
}
